package com.zmn.oms.zmn.business.interfaces.work;

import com.zmn.common.dictionary.DictModel;
import com.zmn.oms.common.exception.OmsBaseException;
import com.zmn.oms.model.bo.order.OrderBO;
import com.zmn.oms.model.dto.work.masterwork.ModifyDutyTimeDTO;
import com.zmn.oms.model.dto.work.masterwork.ModifyQuotationDTO;
import com.zmn.oms.model.dto.work.modify.AppliqueUpdateDTO;
import com.zmn.oms.model.dto.work.modify.CheckQuotationTypeOrderDTO;
import com.zmn.oms.model.dto.work.modify.OrderTurnDTO;
import com.zmn.oms.model.entity.detail.OrderDetail;
import com.zmn.oms.model.entity.work.OrderWork;
import com.zmn.oms.model.vo.work.ZsNormalUpdateOrderVO;

import java.util.List;

/**
 * 类描述：啄木鸟工单 b service
 *
 * @author lujia
 * @date 2018/12/03 17:03
 */
public interface ZsOrderWorkBService {
    /**
     * 修改贴花
     *
     * @param appliqueUpdateDTO
     */
    void updateApplique(AppliqueUpdateDTO appliqueUpdateDTO);

    /**
     * 查询修改订单详情
     *
     * @param orderId
     * @param workId
     * @return
     */
    ZsNormalUpdateOrderVO findUpdateOrderWorkVO(Long orderId, Long workId);

    /**
     * 查询修改订单详情
     *
     * @param orderBO
     * @return
     */
    ZsNormalUpdateOrderVO findUpdateOrderWorkVO(OrderBO orderBO);

    /**
     * 执行转单操作
     *
     * @param orderTurnDTO
     */
    void saveTurn(OrderTurnDTO orderTurnDTO) throws OmsBaseException;

    /**
     * 转单后校验检测
     *
     * @param orderId workId
     */
    Boolean checkTurnStatus(Long orderId, Long workId);

    /**
     * 转单后状态变更
     *
     * @param orderTurnDTO
     */
    void changeTurnStatus(OrderTurnDTO orderTurnDTO);

    /**
     * 自动转单
     *
     * @param orderId
     * @return
     */
    Boolean saveAutoTurn(Long orderId);

    /**
     * 获取可服务平台列表
     *
     * @param orderWork
     * @param orderDetail
     * @return
     */
    List<DictModel> getManagePlatList(OrderWork orderWork, OrderDetail orderDetail);

    /**
     * 修改订单报价（仅针对计价器类型订单调用，不修改订单的计价器类型）
     *
     * @param modifyQuotationDTO
     * @throws OmsBaseException
     */
    void updateOrderQuotation(ModifyQuotationDTO modifyQuotationDTO) throws OmsBaseException;

    /**
     * 重置清空报价及优惠标示信息
     *
     * @param orderWork
     */
    void resetQuotationInfo(OrderWork orderWork) throws OmsBaseException;

    /**
     * 检查平台是否开通服务分类
     *
     * @param plat
     * @param servCategId
     * @param categTwoId
     * @param categTwoId
     * @return boolean
     */
    Boolean checkOpenCategByPlatAndCateg(Integer plat, Integer servCategId, Integer categTwoId);

    /**
     * 修改预约时间
     */
    void updateOrderDutyTime(ModifyDutyTimeDTO modifyDutyTimeDTO) throws OmsBaseException;

    /**
     * 修改预约时间，检验是否可以预约
     */
    void modifyDutyTime(ModifyDutyTimeDTO modifyDutyTimeDTO) throws OmsBaseException;

}
